<?php

require_once 'classes/Animal.php';
require_once 'SCinterface.php';
require_once 'classes/Message.php';

/*
 * Classe de service CRUD pour manipuler les enregistrements d'animaux
 * @author Zikrija
 * @date 03.05.2012
 */
class SCanimal implements SCinterface{
    
    private $db;

    /**
     *Contructeur créant l'objet pour la connexion à la DB 
     */
    public function __construct() {
        $this->db = new PDO(ACA_DB_DSN, ACA_DB_USER, ACA_DB_PASS, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''));
        $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }

    /**
     * Ajoute un animal
     * @param Animal Animal à ajouter
     * @return Animal Un animal ajouté
     */
   public function ajouter($unAnimalAAjouter) {
       $unAnimalMemorise = null;
       try{
           
           $query =  $this->db->prepare("INSERT INTO animal " .
                   "(puceNo, implantation, nom, secondNom, dateNaissance, dateDeces, sexe, couleur, photoProfil, longueurPoil, medaille, tatouage, remarque, typeDeRace_nom) VALUES(".
                   ":puceNo, :implantation, :nom, :secondNom, :dateNaissance, :dateDeces, :sexe, :couleur, :photoProfil, :longueurPoil, :medaille, :tatouage, :remarque, :typeDeRace_nom)");

           $query->execute(array(
                   'puceNo'             => $unAnimalAAjouter->getPuceNo() ,
                   'implantation'       => $unAnimalAAjouter->getImplantation(),
                   'nom'                => $unAnimalAAjouter->getNom(),
                   'secondNom'          => $unAnimalAAjouter->getSecondNom(),
                   'dateNaissance'      => $unAnimalAAjouter->getDateNaissance(),
                   'dateDeces'          => $unAnimalAAjouter->getDateDeces(),
                   'sexe'               => $unAnimalAAjouter->getSexe(),
                   'couleur'            => $unAnimalAAjouter->getCouleur(),
                   'photoProfil'        => $unAnimalAAjouter->getPhotoProfil(),
                   'longueurPoil'       => $unAnimalAAjouter->getLongueurPoil(),
                   'medaille'           => $unAnimalAAjouter->getMedaille(),
                   'tatouage'           => $unAnimalAAjouter->getTatouage(),
                   'remarque'           => $unAnimalAAjouter->getRemarque(),
                   'typeDeRace_nom'     => $unAnimalAAjouter->getTypeDeRace_nom()
               ));
           $unAnimalMemorise = $unAnimalAAjouter;
           $unAnimalMemorise->setId($this->db->lastInsertId());
           
               $query->closeCursor();
       }
       catch(PDOException $e)
        {
            print($e->getMessage());
           return new Message("Animal non ajouté");
        }
       return $unAnimalMemorise;
   }
    /**
     * Methode permettant de modifier un animal
     * @param Animal animal à modifier
     * @return boolean 
     */
    public function modifier($unAnimalAModifier){
        $unAnimalModifie = null;
        try{

            $query =  $this->db->prepare("UPDATE animal SET ".
                "puceNo = :puceNo, implantation = :implantation, nom = :nom, secondNom = :secondNom, 
                 dateNaissance = :dateNaissance, dateDeces = :dateDeces, sexe = :sexe, couleur = :couleur, 
                 photoProfil = :photoProfil, longueurPoil = :longueurPoil, medaille = :medaille, 
                 tatouage = :tatouage, remarque = :remarque, typeDeRace_nom = :typeDeRace_nom ".
                "WHERE id = :idAnimal");

            $query->execute(array(
                'idAnimal'           => $unAnimalAModifier->getId(),
                'puceNo'             => $unAnimalAModifier->getPuceNo() ,
                'implantation'       => $unAnimalAModifier->getImplantation(),
                'nom'                => $unAnimalAModifier->getNom(),
                'secondNom'          => $unAnimalAModifier->getSecondNom(),
                'dateNaissance'      => $unAnimalAModifier->getDateNaissance(),
                'dateDeces'          => $unAnimalAModifier->getDateDeces(),
                'sexe'               => $unAnimalAModifier->getSexe(),
                'couleur'            => $unAnimalAModifier->getCouleur(),
                'photoProfil'        => $unAnimalAModifier->getPhotoProfil(),
                'longueurPoil'       => $unAnimalAModifier->getLongueurPoil(),
                'medaille'           => $unAnimalAModifier->getMedaille(),
                'tatouage'           => $unAnimalAModifier->getTatouage(),
                'remarque'           => $unAnimalAModifier->getRemarque(),
                'typeDeRace_nom'     => $unAnimalAModifier->getTypeDeRace_nom()
            ));
            $unAnimalModifie = $unAnimalAModifier;
            $query->closeCursor();


        }
        catch(PDOException $e){
            print($e->getMessage());
            return new Message("Animal non modifié");
        }
        return $unAnimalModifie;
    }
    /**
     * Methode permettant de supprimer un animal
     * @param Animal Animal à supprimer
     * @return boolean L'etat de la suppression
     */
    public function supprimer($unIDAnimalASupprimer){
        $unAnimalSupprime = false;
        try{ 
            $query = $this->db->prepare("DELETE FROM animal WHERE id = :idAnimal");
            $query->execute(array('idAnimal'=>$unIDAnimalASupprimer));
            $query->closeCursor();
            $unAnimalSupprime = true;
            $message = new Message("Animal supprimé"); 
        }
        catch(PDOException $e){
            print($e->getMessage());
            $message = new Message("Animal non supprimé");
        }
               return $unAnimalSupprime;
    }
   
    /**
     *
     * @param Animal animalALister de recherche sous forme d'objet Animal
     * @return un tableau d'objet Animal
     */
    public function lister($animalALister){
        try{
            $sql="SELECT * FROM animal ";
            $sql_Where="WHERE";
            if($animalALister!=NULL)
            {
                if($animalALister->getId()!=NULL)
                    $sql_Where.=" id = ".$animalALister->getId()." AND ";
                if($animalALister->getPuceNo()!=NULL)
                    $sql_Where.=" puceNo = '".$animalALister->getPuceNo()."' AND ";
                if($animalALister->getImplantation()!=NULL)
                    $sql_Where.=" implantation = '".$animalALister->getImplantation()."' AND ";
                if($animalALister->getNom()!=NULL)
                    $sql_Where.=" nom LIKE '%".$animalALister->getNom()."%' AND ";
                if($animalALister->getSecondNom()!=NULL)
                    $sql_Where.=" secondNom LIKE '%".$animalALister->getSecondNom()."%' AND ";
                if($animalALister->getSexe()!=NULL)
                    $sql_Where.=" sexe = '".$animalALister->getSexe()."' AND ";
                if($animalALister->getCouleur()!=NULL)
                    $sql_Where.=" couleur LIKE '%".$animalALister->getCouleur()."%' AND ";
                if($animalALister->getLongueurPoil()!=NULL)
                    $sql_Where.=" longueurPoil LIKE '%".$animalALister->getLongueurPoil()."%' AND ";
                if($animalALister->getMedaille()!=NULL)
                    $sql_Where.=" medaille LIKE '%".$animalALister->getMedaille()."%' AND ";
                if($animalALister->getTatouage()!=NULL)
                    $sql_Where.=" tatouage LIKE '%".$animalALister->getTatouage()."%' AND ";
                if($animalALister->getTypeDeRace_nom()!=NULL)
                    $sql_Where.=" typeDeRace_nom = '".$animalALister->getTypeDeRace_nom()."' AND ";
            }         


            $sql_Where = substr($sql_Where,0,-5);
            $sql.=$sql_Where." ORDER BY id DESC;";
            $lesAnimauxTrouves=NULL;
            $unAnimalLu=NULL;
            $result=$this->db->query($sql);
            while($row = $result->fetch())
            {   
                $unAnimalLu = new Animal($row['id'], $row['puceNo'], $row['implantation'], $row['nom'], 
                        $row['secondNom'], $row['dateNaissance'], $row['dateDeces'], $row['sexe'], 
                        $row['couleur'], $row['photoProfil'], $row['longueurPoil'], $row['medaille'], 
                        $row['tatouage'], $row['remarque'], $row['typeDeRace_nom']);

                $lesAnimauxTrouves[]=$unAnimalLu;
            }                
        }
        catch(PDOException $e)
        {
            print($e->getMessage());
            $lesAnimauxTrouves=NULL;
        }
        return $lesAnimauxTrouves;
    }

  
        /**
     *
     * @param Animal animalALister de recherche sous forme d'objet Animal
     * @return un tableau d'objet Animal
     */
    public function listerAvecRace($animalALister, $uneRace){
        try{
            
            
            $sql="SELECT animal.* FROM animal ";
            if($uneRace != null)
                $sql.="INNER JOIN racetoanimal ON animal.id = racetoanimal.animal_id ";
            $sql_Where="WHERE";
            if($animalALister!=NULL)
            {
                if($animalALister->getId()!=NULL)
                    $sql_Where.=" id = '".$animalALister->getId()."' AND ";
                if($animalALister->getPuceNo()!=NULL)
                    $sql_Where.=" puceNo = '".$animalALister->getPuceNo()."' AND ";
                if($animalALister->getImplantation()!=NULL)
                    $sql_Where.=" implantation = '".$animalALister->getImplantation()."' AND ";
                if($animalALister->getNom()!=NULL)
                    $sql_Where.=" nom LIKE '%".$animalALister->getNom()."%' AND ";
                if($animalALister->getSecondNom()!=NULL)
                    $sql_Where.=" secondNom LIKE '%".$animalALister->getSecondNom()."%' AND ";
                if($animalALister->getSexe()!=NULL)
                    $sql_Where.=" sexe = '".$animalALister->getSexe()."' AND ";
                if($animalALister->getCouleur()!=NULL)
                    $sql_Where.=" couleur LIKE '%".$animalALister->getCouleur()."%' AND ";
                if($animalALister->getLongueurPoil()!=NULL)
                    $sql_Where.=" longueurPoil LIKE '%".$animalALister->getLongueurPoil()."%' AND ";
                if($animalALister->getMedaille()!=NULL)
                    $sql_Where.=" medaille LIKE '%".$animalALister->getMedaille()."%' AND ";
                if($animalALister->getTatouage()!=NULL)
                    $sql_Where.=" tatouage LIKE '%".$animalALister->getTatouage()."%' AND ";
                if($animalALister->getTypeDeRace_nom()!=NULL)
                    $sql_Where.=" animal.typeDeRace_nom = '".$animalALister->getTypeDeRace_nom()."' AND ";
            }
            if($uneRace!=NULL)
            {
                if($uneRace->getNom()!=NULL)
                    $sql_Where.=" racetoanimal.race_nom = '".$uneRace->getNom()."' AND ";
            }
           


            $sql_Where = substr($sql_Where,0,-5);
            $sql.=$sql_Where." ORDER BY id DESC;";
            $lesAnimauxTrouves=NULL;
            $unAnimalLu=NULL;
            $result=$this->db->query($sql);
            while($row = $result->fetch())
            {   
                $unAnimalLu = new Animal($row['id'], $row['puceNo'], $row['implantation'], $row['nom'], 
                        $row['secondNom'], $row['dateNaissance'], $row['dateDeces'], $row['sexe'], 
                        $row['couleur'], $row['photoProfil'], $row['longueurPoil'], $row['medaille'], 
                        $row['tatouage'], $row['remarque'], $row['typeDeRace_nom']);

                $lesAnimauxTrouves[]=$unAnimalLu;
            }                
        }
        catch(PDOException $e)
        {
            print($e->getMessage());
            $lesAnimauxTrouves=NULL;
        }
        return $lesAnimauxTrouves;
    }

  
}

?>
